import fetch from 'dva/fetch';
import { notification, message } from 'antd';
import { routerRedux } from 'dva/router';
import store from '../index';
import { dealParams, decryptRes } from './requestUtil';
import reqwest from 'reqwest';

const codeMessage = {
	200: '服务器成功返回请求的数据。',
	201: '新建或修改数据成功。',
	202: '一个请求已经进入后台排队（异步任务）。',
	204: '删除数据成功。',
	400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
	401: '用户没有权限（令牌、用户名、密码错误）。',
	403: '用户得到授权，但是访问是被禁止的。',
	404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
	406: '请求的格式不可得。',
	410: '请求的资源被永久删除，且不会再得到的。',
	422: '当创建一个对象时，发生一个验证错误。',
	500: '服务器发生错误，请检查服务器。',
	502: '网关错误。',
	503: '服务不可用，服务器暂时过载或维护。',
	504: '网关超时。',
};
function checkStatus(response) {
	if (response.status >= 200 && response.status < 300) {
		return response;
	}
	const errortext = codeMessage[response.status] || response.statusText;
	notification.error({
		message: `请求错误 ${response.status}: ${response.url}`,
		description: errortext,
	});
	const error = new Error(errortext);
	error.name = response.status;
	error.response = response;
	throw error;
}

/**
 * Requests a URL, returning a promise.
 *
 * @param  {string} url       The URL we want to request
 * @param  {object} [options] The options we want to pass to "fetch"
 * @return {object}           An object containing either "data" or "err"
 */
export function request(url, options, noEncrypt) {
	console.log('调用接口地址URL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>', url);
	const defaultOptions = {
		credentials: 'include',
		authToken: localStorage.getItem('token'),
	};
	const newOptions = { ...defaultOptions, ...options };
	if (
		newOptions.method === 'POST' ||
		newOptions.method === 'PUT' ||
		newOptions.method === 'DELETE'
	) {
		if (!(newOptions.body instanceof FormData)) {
			newOptions.headers = {
				Accept: 'application/json',
				authToken: localStorage.getItem('token'),
				'Content-Type': 'application/json; charset=utf-8',
				...newOptions.headers,
			};
			console.log('接口请求参数为：', newOptions.body);
			if (noEncrypt) {
				newOptions.body = JSON.stringify(newOptions.body);
			} else {
				 	newOptions.body = dealParams(newOptions.body);
			}
		} else {
			// newOptions.body is FormData
			newOptions.headers = {
				Accept: 'application/json',
				authToken: localStorage.getItem('token'),
				...newOptions.headers,
			};
		}
	}

	// return null

	return fetch(url, newOptions)
		.then(checkStatus)
		.then(response => {
			if (!noEncrypt) {
				return response.text();
			} else {
				return response.json();
			}
		})
		.catch(e => {
			const { dispatch } = store;
			const status = e.name;
			if (status === 401) {
				dispatch({
					type: 'login/logout',
				});
				return;
			}
			if (status === 403) {
				dispatch(routerRedux.push('/exception/403'));
				return;
			}
			if (status <= 504 && status >= 500) {
				dispatch(routerRedux.push('/exception/500'));
				return;
			}
			if (status >= 404 && status < 422) {
				dispatch(routerRedux.push('/exception/404'));
			}
		});
}

export function formRequest(url, param, file, noEncrypt) {
	console.log('调后台请求接口地址》》》》》》》》》：', url);
	console.log('表单提交参数：', param);
	console.log('表单提交图片：', file);
	var sumitData = new FormData();
	
	if(file==null){
		let formData = dealParams(param.body);
		sumitData.append('formData', formData);
	}else{
		param.body.file = file;
		param.body.name = file;
		param.body.showImg = file.name;
		let formData = dealParams(param.body);
		sumitData.append('formData', formData);
		sumitData.append('file', file);
		sumitData.append('name', file);
		sumitData.append('showImg', file.name);
	}
	let token = localStorage.getItem('token');
	console.log(token)
	// return reqwest({
	//   url: url,
	//   method: 'post',
	//   processData: false,
	//   contentType:false ,
	//   dataType:'json',
	//   data: sumitData,
	//   headers: { authToken: token },
	//   success: function (resp) {
	//      console.log('ajax表单请求返回：', resp)
	//     return resp
	//   },
	//   error: function (resp) {
	//     console.log(resp)
	//      message.error('操作失败，请稍后重试！');
	//     //return resp
	//   }
	// })
	return fetch(url, {
		method: 'POST',
		body: sumitData,
		headers: {
			authToken: token,
		},
	})
		.then(response => {
			console.log('response', response);
			return response.text();
		})
		.catch(error => {
			console.log('error', error);
		});
}
